我想在.txt文件中执行以下操作。 file.txt的内容是:
w|x|y|z
w1|x1|y1|z1
w2|x2|y2|z2
必填结果:
w|x|y|z|w_x
w1|x1|y1|z1|w1_x1
w2|x2|y2|z2|w2_x2
我希望在每行的末尾添加前两个管道分隔的单词,并在同一文件中添加下划线(_)。
答案 0 :(得分:4)
您可以使用sed:
perl -plaF'/\|/' -e '$_ .= "|$F[0]_$F[1]"' -- file.txt
或Perl:
-p
-l
逐行读取输入并打印输出-a
从输入中删除换行符并将其添加到输出-F
将输入拆分为@F数组-a
指定Compact blob store
答案 1 :(得分:1)
perl和(gnu)sed的“优点”是它们提供了一个用输出覆盖文件的选项,这似乎是OP的愿望。缺点是它们提供了这样的选项,防止用户认识到这样的东西不是Unix Way TM。使用awk执行此操作,并使用shell根据需要重定向输出(例如,写入临时文件并根据需要移动它)。
awk '{print $0,$1 "_" $2}' OFS=\| FS=\| file.txt
答案 2 :(得分:1)
使用纯粹的bash文本处理简单命令:
cut -d '|' -f 1,2 --output-delimiter='_' t.txt | paste -d '|' t.txt -
如果您的数据位于t.txt
文件中。
说明:
cut
)从文件中获取第一列和第二列,并将它们与' _'连接起来。 (输出分隔符)paste
使用' |'将原始文件与上一个命令的输出一行一行地连接起来。分隔符(通知-
标记,用作从cut
命令的管道数据中获取的标准输入)