1

我有 file.txt 3 列。

1 A B
2 C D
3 E F

我想添加#1 作为#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

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

任何人都可以建议这样做的其他方式吗?我相信我尝试使用的那个太复杂了,这就是为什么我得到如此奇怪的输出。

4

3 回答 3

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

于 2012-04-12T17:55:40.977 回答
1

cat file.txt | awk '{print $1 $2 "\n" $1 $3};'

于 2012-04-12T17:47:02.483 回答
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了,因此你得到了所有重复的行。

于 2012-04-12T18:51:53.327 回答