如何使用bash并排显示四个文件? 文件名是:data2 data4 data5和data6。
我试过
paste data2 data4 data5 data6 |awk -F"," '{printf("%-50s %s\n",$1,$2,$3,$4,$5)}' > data3
。
这几乎可行,但由于某种原因它不输出每个文件的最后一列(每个文件的最后一列只是一个逗号“,”)。我也需要包含最后一栏。
感谢。
答案 0 :(得分:0)
您告诉awk
逗号是字段分隔符,因此它不会保留逗号。您还打印$1
和$2
,因为格式中只有两个%s
规范(忽略$3
到$5
)。告诉awk
使用paste
使用的标签字符。
paste data2 data4 data5 data6 |
awk -F $'\t' '{printf("%-30s %-30s %-30s %s\n", $1, $2, $3, $4)}'
$'\t'
是一个名为ANSI C Quoting的Bash扩展程序。如果您没有使用Bash,请使用-F ' '
,其中两个单引号之间有一个制表符(可能使用 Control-V Tab 输入)。 / p>
此代码确实假设数据文件中没有选项卡。如果有选项卡,则选择不在任何文件中作为分隔符的其他字符 - 也许 Control-A - 并告诉paste
和awk
请改用:
paste -d $'\001' data2 data4 data5 data6 |
awk -F $'\001' '{printf("%-30s %-30s %-30s %s\n", $1, $2, $3, $4)}'
答案 1 :(得分:0)
这是gnu awk
解决方案
awk -F, -v OFS="\t" '
ARGIND == 1 {f1[FNR]=$0;c=c<FNR?FNR:c;next}
ARGIND == 2 {f2[FNR]=$0;c=c<FNR?FNR:c;next}
ARGIND == 3 {f3[FNR]=$0;c=c<FNR?FNR:c;next}
ARGIND == 3 {f4[FNR]=$0;c=c<FNR?FNR:c;next}
END {
for (i=1;i<=c;i++) print f1[i],f2[i],f3[i],f4[i]}
' data2 data4 data5 data6
它使用ARGIND
将每个文件读入不同的数组,然后是
以正确的格式打印出来。