我是shell脚本的新手,我需要创建一个具有以下条件的shell脚本。
shell脚本应该读取每行的Inputfile.txt并获取文件中的第一和第六列并创建一个新的outputfile.txt
Inputfile.txt
123 | xyz | abc | abc | abc | 567
321 | xyz | abc | abc | abc | 765
Outputfile.txt
123 | 567
321 | 765
答案 0 :(得分:6)
使用简单的剪切命令就足够了:
cut -d "|" -f 1,6
答案 1 :(得分:2)
捕获第一个和第六个项目,然后用竖线分隔打印出来:
$ awk -F'|' '{print $1 "|" $6}' inputfile.txt
123 | 567 321
-F'|'
告诉awk
使用竖线作为输入文件的字段分隔符。
要在outputfile.txt
中保存上述输出,请使用重定向:
$ awk -F'|' '{print $1 "|" $6}' inputfile.txt >outputfile.txt
或者,通过将awk
的输出字段分隔符(OFS
)设置为垂直条,可以获得相同的结果:
$ awk -F'|' 'BEGIN{OFS="|"} {print $1,$6}' inputfile.txt >outputfile.txt
答案 2 :(得分:1)
如果您不想使用任何工具,那么这里是获取bash
中第一个和最后一个元素的方法:
$ cat inputfile.txt
123 | xyz | abc | abc | abc | 567
321 | xyz | abc | abc | abc | 765
$ while IFS="|" read -ra line; do
echo "${line[0]}|${line[${#line[@]}-1]}"
done < inputfile.txt
123 | 567
321 | 765
您也可以使用文字下标,因此您可以${line[${#line[@]}-1]}
代替${line[5]}
。
答案 3 :(得分:0)
你也可以使用awk
:
awk '{print $1, $10, $11}' input.txt
(OR)
awk -F'|' '{print $1 "|" $6 $11}' input.txt
(OR)
awk '{print $1, $11}' input.txt
(OR)
您只需使用cut
命令:
cut -d"|" -f 1,6
(OR)
使用sed
:
sed 's/|.*|/|/' input.txt
还有grep
......但我对此并不熟悉:)
另外:@anubhava告诉我:
awk -F '[| ]+' '{print $1, $NF}' OFS=' | ' input.txt
(OR)
while IFS=' | ' read -a arr
echo "${arr[0]} | ${arr[@]:(-1)}"
done < input.txt