Age*_*e87 2 sed awk text-processing
我希望第 2 列包含字符串 Piebald,其他字符串的顺序无关紧要。我有:
HR0024 Black pastel Piebald
HR0028 Piebald
MC0023 Piebald
MC0039 Fire Piebald
MC0075 Piebald VPI Axanthic
MC0082 Pastel Piebald
MC0120 Piebald Yellowbelly Het-Lavender
MC0124 Super-Pastel Piebald Het-Clown
MC0126 Fire Pastel Piebald
MC0144 Piebald Vanilla
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
HR0024 Piebald pastel Black
HR0028 Piebald
MC0023 Piebald
MC0039 Piebald Fire
MC0075 Piebald VPI Axanthic
MC0082 Piebald Pastel
MC0120 Piebald Yellowbelly Het-Lavender
MC0124 Piebald Super-Pastel Het-Clown
MC0126 Piebald Pastel Fire
MC0144 Piebald Vanilla
Run Code Online (Sandbox Code Playgroud)
某些行将在不同的列(2、3 或 4)上具有目标字符串。我不认为cut -f
这里的工作,我认为awk
或sed
需要。任何帮助表示赞赏。
使用 awk,我们遍历字段,如果找到选定的字段,则与第二个字段交换。
awk -v p="Piebald" '{
for (i=2;i<=NF;i++) if ($i == p) {$i = $2; $2 = p; break}
}1' file
Run Code Online (Sandbox Code Playgroud)
1
最后意味着print
该行。break
交换后提前退出循环-v var="value"
是将变量传递给awk
.输出:
HR0024 Piebald pastel Black
HR0028 Piebald
MC0023 Piebald
MC0039 Piebald Fire
MC0075 Piebald VPI Axanthic
MC0082 Piebald Pastel
MC0120 Piebald Yellowbelly Het. lavender
Run Code Online (Sandbox Code Playgroud)