我有file.txt 3列。
1 A B
2 C D
3 E F
我想添加#1&#3作为#2的结尾。结果应如下所示:
1A
2C
3E
1B
2D
3F
我是通过
来做的cut -f 1,2 > tmp1
cut -f 1,3 > tmp2
cat *tmp * > final_file
但我得到重复的行!如果我用以下方法检查最终输出:
cat * | sort | uniq -d
有很多重复的行,主文件中没有。
有人可以建议其他方式吗?我相信我试图使用的那个太复杂了,这就是为什么我得到这么奇怪的输出。
答案 0 :(得分:3)
pzanoni@vicky:/tmp$ cat file.txt
1 A B
2 C D
3 E F
pzanoni@vicky:/tmp$ cut -d' ' -f1,2 file.txt > result
pzanoni@vicky:/tmp$ cut -d' ' -f1,3 file.txt >> result
pzanoni@vicky:/tmp$ cat result
1 A
2 C
3 E
1 B
2 D
3 F
我正在使用bash
答案 1 :(得分:1)
cat file.txt | awk '{print $1 $2 "\n" $1 $3};'
答案 2 :(得分:1)
一次通过文件
保留订单awk '
{print $1 $2; pass2 = pass2 sep $1 $3; sep = "\n"}
END {print pass2}
' file.txt
这个(cat tmp* * > final_file
)错误的原因:
*tmp
是一个错字看看这些通配符将如何扩展:
tmp*
扩展为“tmp1”和“tmp2”*
也会扩展为“tmp1”和“tmp2”因此,您的命令行变为cat tmp1 tmp2 tmp1 tmp2 > final_file
,因此您将获得所有重复的行。