我有一个带有数据标题的文件,还有另一个有关所有标题的信息。因此,我首先需要一行一行地读取标题文件,然后在另一文件中查找该行,如果找到了模式,则复制该行和下一行,直到新文件中的第一行为空。
我一直在尝试:
#!/bin/bash
fname1= header.txt
fname2= complete-data.txt
cat $fname1 | while read -r line; do
echo $line
sed -n "$line/,/^ *$/p" $fname2 > new-file.txt
done
但它不起作用:
sed: can't read line/,/^ *$/p: No such file or directory
当我复制一行并手动执行时,它会起作用:
sed -n 'line_to_find/,/^ *$/p2' complete-data.txt > new-file.txt
帮助
答案 0 :(得分:0)
欢迎来到。
首先,在图案的开头添加一个/
。
第二,您将在每次迭代中覆盖输出。
在循环结束时进行I / O控制:
$: cat header.txt
2
4
$: cat complete-data.txt
1
this is #1
just #1
2
this is #2
just #2
3
this is #3
just #3
4
this is #4
just #4
5
this is #5
just #5
$: while read -r line
do sed -n "/$line/,/^ *$/p" complete-data.txt
done < header.txt > new-file.txt
$: cat new-file.txt
2
this is #2
just #2
4
this is #4
just #4
答案 1 :(得分:0)
自从我写下问题以来,我意识到我错过了/。 但是,钢铁不起作用!!我以为可能是空格,但是我已经解决了这个问题,但仍然无法正常工作...
这是我的真实情况:
header.txt
2019 11 16 46 6.4183 -29.23337 -71.06854 5.0000 NOEVID 0.116 5.612 4.0 5.0 20.0 21.0 9 7 16
complete-data.txt
2019 11 2 48 45.5745 -29.14132 -71.05508 54.6150 NOEVID 0.215 5.799 8.0 12.0 19.0 23.9 6 6 12
- CP50 2019 11 2 48 57.169 P 0.601 0.588
- CP50 2019 11 2 49 5.164 S 1.472 0.354
- CP51 2019 11 2 48 55.744 P 0.254 -0.044
- CP51 2019 11 2 49 3.199 S 0.910 -0.250
2019 11 16 46 6.4183 -29.23337 -71.06854 5.0000 NOEVID 0.116 5.612 4.0 5.0 20.0 21.0 9 7 16
- CP50 2019 11 16 46 16.120 P 0.351 0.097
- CP51 2019 11 16 46 15.205 P 0.247 -0.099
- CP52 2019 11 16 46 16.950 P 0.382 0.104
2019 12 0 45 30.5744 -29.01455 -71.32178 37.2900 NOEVID 0.093 6.448 7.0 5.0 12.0 14.8 10 10 20
- C59B 2019 12 0 45 58.219XS 4.500 0.098
- CP02 2019 12 0 45 54.504*P 0.691 2.203
- CP02 2019 12 0 46 7.929 S 1.412 -0.563
我的脚本:
input="header.txt"
while IFS= read line
do
j=$(printf "%s\n" "$line")
echo "$j"
sed -n "/$j/,/^ *$/p" complete-data.txt >> new-file.txt
done < "$input"
运行此脚本时,new-file.txt为空。我尝试更改最后一行:
done < "$input" > new-file.txt
但输出文件仍然为空
但是!如果我手动运行它:
sed -n "/2019 11 16 46 6.4183 -29.23337 -71.06854 5.0000 NOEVID 0.116 5.612 4.0 5.0 20.0 21.0 9 7 16/,/^ *$/p" complete-data.txt >> new-file.txt
这有效!