![向行添加新行字符](https://linux22.com/image/140440/%E5%90%91%E8%A1%8C%E6%B7%BB%E5%8A%A0%E6%96%B0%E8%A1%8C%E5%AD%97%E7%AC%A6.png)
我想提取第二个字段并将其转置为一行
cat > temp1
1 73
2 74
3 75
我的方法:
cut -f2 temp1 | tr '\n' '\t' > temp2
结果 :
temp2
73 74 75
可以理解的是,该行的右端有一个制表符分隔符,但缺少一个换行符。有没有一种简单的方法可以解决这个问题?
答案1
使用paste
而不是tr
:
$ cut -f2 temp1 | paste -s
73 74 75
验证不可见的空白
$ cut -f2 temp1 | paste -s | od -c
0000000 7 3 \t 7 4 \t 7 5 \n
0000011
答案2
cat file | cut -d' ' -f2 | xargs -n3
73 74 75
并验证每个不可见的空白@格伦·杰克曼
cat file | cut -d' ' -f4 | xargs -n3 | od -c
0000000 7 3 7 4 7 5 \n
0000011
答案3
打印/发出/给出新行的最简单方法是使用echo
.
在创建的文件中添加新行似乎很简单:
剪切-f2 temp1 | tr '\n' '\t' > temp2 echo >> temp2
这可以在一行中完成:
{ cut -f2 temp1 | tr '\n' '\t' ; echo ; } > temp2
也就是说:如果尾随制表符不是问题。如果是,您需要删除它或避免生成它,其中任何一个都可以做到这一点:
awk 'NR>1{printf( "%s\t",a)}{a=$2}END{print a}' temp1 >temp2
sed -n 's/[0-9]*[[:blank:]]*//;1{h;d};H;${g;y/\n/\t/;p}' temp1 >temp2
sed 's/[0-9]*[[:blank:]]*//' temp1 | paste -sd '\t' >temp2