4

我有两个文件如下:

文件_1

Austin
Los Angeles
York
San Ramon

文件_2

Texas
California
New York
California

我想将它们水平合并如下:

Austin       Texas
Los Angeles  California
York         New York
San Ramon    California

我可以通过使用paste命令进行水平合并,但是格式变得混乱。

Austin Texas
Los Angeles California
York New York
San Ramon California

我意识到这paste是按预期工作的,但是有人可以指出我正确的方向以正确格式化。

谢谢。

4

3 回答 3

6

paste 在“合并”文件时使用选项卡,因此您可能必须对文件进行后处理并删除带有空格的选项卡:

paste File_1 File_2 | awk 'BEGIN { FS = "\t" } ; {printf("%-20s%s\n",$1,$2) }'

结果:

Austin              Texas
Los Angeles         California
York                New York
San Ramon           California
于 2012-08-03T11:54:27.863 回答
1

首先,您必须检查最长行中的字符数。比您可以使用 fmt 将第一个文件中的行填充到更大的长度。使用粘贴完成它。

于 2012-08-03T11:53:42.527 回答
1

如果您对字段宽度有所了解,可以执行以下操作:

IFS_BAK="$IFS"
IFS=$'\t'
paste file_1 file_2 \
| while read city state; do 
    printf "%-15s %-15s\n" "$city" "$state"
  done
IFS="$IFS_BAK"

或者这个较短的版本:

paste file_1 file_2 | while IFS=$'\t' read city state; do
  printf "%-15s %-15s\n" "$city" "$state"
done

或使用以下column工具bsdmainutils

paste file_1 file_2 | column -s $'\t' -t
于 2012-08-03T12:12:47.390 回答