合并列切割&猫

时间:2012-04-12 17:31:47

标签: shell

我有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

有很多重复的行,主文件中没有。

有人可以建议其他方式吗?我相信我试图使用的那个太复杂了,这就是为什么我得到这么奇怪的输出。

3 个答案:

答案 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是一个错字
  • 我认为此时目录只包含“tmp1”和“tmp2”

看看这些通配符将如何扩展:

  • tmp*扩展为“tmp1”和“tmp2”
  • *也会扩展为“tmp1”和“tmp2”

因此,您的命令行变为cat tmp1 tmp2 tmp1 tmp2 > final_file,因此您将获得所有重复的行。