假设我有两个这样的文件:
1 a one ...
2 b two ...
3 c three ...
4 d four ...
5 e five ...
6 f six ...
和
a
c
f
有没有办法,不知道文件 1 中的列数(或者不必重复每个字段),我可以使用 join 来获取匹配行
1 a one ...
3 c three ...
6 f six ...
我试过了
join -1 2 -o 1.0 file1 file2
就像你写的$0
那样获取所有字段awk
,但我显然得到了invalid field number
。
答案1
您可以选择按顺序打印哪些字段或按默认顺序打印所有字段。但您无法打印“其余字段”。
从man join
:
-o FORMAT
obey FORMAT while constructing output line
[...]
Any FIELD is a field number counted from 1. FORMAT is one or
more comma or blank separated specifications, each being
'FILENUM.FIELD' or '0'.
你可以使用 awk:
awk -v regex="$(head -c -1 file2 | tr '\n' '|')" '$2 ~ regex' file1
- 删除 file2 的最后一个换行符并用“|”替换换行符,正则表达式将是
a|c|f
- 将 file1 的第二个字段与该正则表达式匹配
或者使用 Sundeep 的 awk 解决方案,特别是如果 file2 包含特殊字符。
答案2
在你的情况下,你可以只交换前两个字段:
| awk '{swap=$1;$1=$2;$2=swap;print $0}'