我正在处理一个bash脚本,我想并排打印两个文件。 一个文件填充IPv4地址,另一个文件填充IPv6地址。 我试过了,
pr -mtw $WIDTH $FILE1 $FILE2
但它减少了输出。
┌────┤IPV4├─────┬─────────────────┤IPV6├────────────────┐
224.0.0.1 2001:0db8:0000:
192.0.2.128 ff02::1
192.0.2.128 2001:0db8:0000:
192.0.2.128 ::
2001:0db8:0000:
2001:db8:0:0:0:
2001:db8::ff00:
0000:0000:0000:
::1
fe80::
::ffff:192.0.2.
::192.0.2.128
我也试过了,
paste $FILE1 $FILE2 | awk '$1=$1' OFS='\t '
,输出是,
┌────┤IPV4├─────┬─────────────────┤IPV6├────────────────┐
224.0.0.1 2001:0db8:0000:0042:0000:8a2e:0370:7334
192.0.2.128 ff02::1
192.0.2.128 2001:0db8:0000:0000:0000:ff00:0042:8329
192.0.2.128 ::
2001:0db8:0000:0000:0000:ff00:0042:8329
2001:db8:0:0:0:ff00:42:8329
2001:db8::ff00:42:8329
0000:0000:0000:0000:0000:0000:0000:0001
::1
fe80::
::ffff:192.0.2.128
::192.0.2.128
我希望输出类似于
┌────┤IPV4├─────┬─────────────────┤IPV6├────────────────┐
224.0.0.1 2001:0db8:0000:0042:0000:8a2e:0370:7334
192.0.2.128 ff02::1
192.0.2.128 2001:0db8:0000:0000:0000:ff00:0042:8329
192.0.2.128 ::
2001:0db8:0000:0000:0000:ff00:0042:8329
2001:db8:0:0:0:ff00:42:8329
2001:db8::ff00:42:8329
0000:0000:0000:0000:0000:0000:0000:0001
::1
fe80::
::ffff:192.0.2.128
::192.0.2.128
FILE1:
224.0.0.1
192.0.2.128
192.0.2.128
192.0.2.128
FILE2:
2001:0db8:0000:0042:0000:8a2e:0370:7334
ff02::1
2001:0db8:0000:0000:0000:ff00:0042:8329
::
2001:0db8:0000:0000:0000:ff00:0042:8329
2001:db8:0:0:0:ff00:42:8329
2001:db8::ff00:42:8329
0000:0000:0000:0000:0000:0000:0000:0001
::1
fe80::
::ffff:192.0.2.128
::192.0.2.128
请注意,每行的开头都有一个空格。 有什么想法吗?
答案 0 :(得分:2)
使用awk
,tr
和GNU paste
命令: -
$ paste file1 file2 | awk -v FS='\t' '{printf("%-15s %s\n",$1,$2)}' | \
awk '{sub(/^/, " ", $0)}1'
224.0.0.1 2001:0db8:0000:0042:0000:8a2e:0370:7334
192.0.2.128 ff02::1
192.0.2.128 2001:0db8:0000:0000:0000:ff00:0042:8329
192.0.2.128 ::
2001:0db8:0000:0000:0000:ff00:0042:8329
2001:db8:0:0:0:ff00:42:8329
2001:db8::ff00:42:8329
0000:0000:0000:0000:0000:0000:0000:0001
::1
fe80::
::ffff:192.0.2.128
::192.0.2.128
您可以使用第二个优化最后一个管道awk
,但不确定该怎么做。否则,这有效!
答案 1 :(得分:1)
这很好用
paste "$FILE1" "$FILE2" | awk -F'\t' '{printf("%-16s%s\n", $1, $2)}'
答案 2 :(得分:1)
您可以使用命令column
:
paste -d, file1 file2 | column -s',' -n -t
paste
命令将逐行加入两个文件与分隔符,
。
column命令会将,
替换为必要的空格,以使其正确缩进(使用选项-t
)。
-n
要求column
填写空列。 请注意,-n
选项是特定于Debian的。