我正在尝试编写一个脚本来编辑文本文件的格式。我得到了一个带有坐标
形式的文件x: 123
y: 456
x: 789
y: 012
...
但需要表格
123 456 i
789 012 i
...
有点像Edit text format with shell script,反过来又多一点;)
你们有什么想法我能做到这一点吗?
答案 0 :(得分:1)
使用计数器在读取每2行后切换打印的简单bash脚本可以满足您的需要。只需将数据文件作为参数1传递:
#!/bin/bash
declare -i cnt=0
while read -r line || [ -n "$line" ]; do
array+=( ${line##* } ) # read values into array
((cnt++)) # increase counter
if [ "$cnt" -eq 2 ]; then # if count = 2
printf "%s %s i\n" "${array[0]}" "${array[1]}" # print both array values
cnt=0 # reset count to 0
unset array # unset array
fi
done <"$1"
<强>输出强>
123 456 i
789 012 i
答案 1 :(得分:0)
您可以使用以下内容:
awk 'NR>1&&NR%2{print a[1],a[2],"i";i=0}{a[++i]=$2}END{print a[1],a[2],"i"}' file
数组a
包含前两行的内容。忽略第一行,当行号为奇数时(即当NR%2
为1时),打印最后两行,然后是&#34; i&#34;。最后,打印最后两行。
测试出来:
$ awk 'NR>1&&NR%2{print a[1],a[2],"i";i=0}{a[++i]=$2}END{print a[1],a[2],"i"}' file
123 456 i
789 012 i
答案 2 :(得分:0)
您可以使用awk
:
$ awk '$1 == "x:"{line=$2}$1 == "y:"{line=line FS $2 FS "i"; print line}' file
123 456 i
789 012 i
或者,read
循环:
while read -ra line; do
case ${line[0]} in
x:)
new_line=${line[1]}
;;
y:)
new_line+=" ${line[1]} i"
echo $new_line
;;
esac
done < file