我是shell脚本的新手,我手中的Task分为2个shell脚本。
我想做两个shell脚本的管道传输(它应该从不同的目录而不是编写脚本的地方运行)并且目前运行良好。
第一个shell脚本包含:
合并存储在文件夹中的大约90个.lvm文件。
裁剪每个.lvm
文件,删除标题和裁剪直到数据结束。
现在我需要在每个文件被迭代后在第18列中打印一个值以区分文件结尾(这里我试着写500)
#!/bin/sh
clear
for file in "$1/"*.lvm; do
a=$(awk '/X_Value/{ print NR; exit }' "$file")
b=$(awk 'END {print NR}' "$file")
awk '{OFS= "\t"} {NR==$b $18,"500"}' "$file"
#specified row is $b and column number is 18
sed "s|\$a|${b}|" "$file"
done
第二个shell脚本包含:
这是:
#!/bin/sh
clear
while read line; do
sleep 1
awk -v OFS='\t' '{print $1, $2, $3, $8, $18}'
done
现在输出:
file1 196287,265000 3,902977 -39,226354 0,873427
file1 196287,266000 3,890747 -51,032699 0,519405
file1 196287,267000 3,900080 -51,472975 -0,446108
....
....
....
file2 196287,268000 3,904586 -50,627182 -0,092086
file2 196287,269000 3,870793 -30,687314 1,195265
file2 196287,270000 3,897505 -30,073244 0,744692
....
....
期望输出:
file1 196287,265000 3,902977 -39,226354 0,873427 0
file1 196287,266000 3,890747 -51,032699 0,519405 0
file1 196287,267000 3,900080 -51,472975 -0,446108 500
...
...
...
file2 196287,268000 3,904586 -50,627182 -0,092086 0
file2 196287,269000 3,870793 -30,687314 1,195265 0
file2 196287,270000 3,897505 -30,073244 0,744692 500
...
...
答案 0 :(得分:0)
我不喜欢awk。我不使用awk。如果你必须嘲笑我。 如果bash无法处理某些东西,我会用perl重写它。 = O)
那就是说 - 这是一个笨拙的全剧版。 要做的很多改进,但是工作会让我的乐趣中断,哈哈
nl="
"
for f in "$1/"*.lvm
do typeset out=''
while read a b c d e
do out="$out$( printf "%-25s%14s%14s%14s%14s%14s" $f $a $b $c $d $e )$nl"
done <<< "$(cut -f 1,2,3,8,18 -d ' ' $f )"
stack="$stack$nl$(printf "${out% *} 500$nl")"
done
echo "$stack"|grep -v '^$'