【发布时间】:2016-05-27 14:28:34
【问题描述】:
所以我需要用之前找到的一行来更改大文本文件中的特定行。文字是什么样子的:
名称:一些文字
Société: 一些文字
地址:一些文本和 numb3rs 代码 邮政编码:[0-9][0-9][0-9][0-9][0-9] SOME TEXT
电话。 :
数字
传真:
数字
“----------”
到目前为止我发现的是(我相信我快完成了):
K=0
while [ $K -lt 11519 ]; do
let K=K+1
L=`head -n $K file_that_contains_line_numbers_I_want.txt | tail -1`
M=`expr $L - 2`
dept=`head -n $L filename.txt | tail -1 | sed -e 's/Adresse:.*Code Postal: //' -e 's/[0-9]\{3\} .*//'`
sed -n ""$M"{s/Tél. :/$dept/; /----------------------/p; q}" filename.txt >>newfile.csv
done
其中 $dept 是邮政编码后的前两位数字:.
sed 的最后一点还不起作用:我希望最终文件看起来像旧文件,只是带有“Tél”。部分更改为 $dept。
新文件:
名称:一些文字
Société: 一些文字
地址:一些文本和 numb3rs 代码邮政编码:90000 SOME TEXT
90
数字
传真:
数字
“----------”
显然这种模式与名称重复,但有时 Tél 行。及以下不存在。
tl博士;我想更改文件中的模式,其中找到的东西排成一行,而找到的东西排成一排。
如果您找到一种不同的方式将 $dept 放在不同的行中,我会很高兴听到这个消息。
我知道我的代码并不是最有效的,但我只在一周前了解了 sed。
提前感谢您帮助我/纠正我。
编辑:我被要求提供一些输入,这里是:
名称:JOHN DOE
Société: APERTURE SCIENCE
地址:37 RUE OF PARIS CS 30112 邮政编码:51726 REIMS CEDEX
电话。 :
12 34 56 78 90
传真:
12 34 56 78 90
“----------”
名称:OLIVER TWIST
Société: 美国国家航空航天局
地址:40 RUE DU GINGEMBRE CS 70999 邮政编码:67009 STRASBOURG CEDEX
电话。 :
12 34 56 78 90
传真:
12 34 56 78 90
“----------”
名称:巴拉克·奥巴马
Société: 白宫
地址:124 BOULEVARD DE GAULLE 代码邮政编码:75017 PARIS
电话。 : 12 34 56 78 90
“----------”
我想要实现的输出:
名称:JOHN DOE
Société: APERTURE SCIENCE
地址:37 RUE OF PARIS CS 30112 邮政编码:51726 REIMS CEDEX
51
12 34 56 78 90
传真:
12 34 56 78 90
“----------”
名称:OLIVER TWIST
Société: 美国国家航空航天局
地址:40 RUE DU GINGEMBRE CS 70999 邮政编码:67009 STRASBOURG CEDEX
67 12 34 56 78 90
传真:
12 34 56 78 90
“----------”
名称:巴拉克·奥巴马
Société: 白宫
地址:124 BOULEVARD DE GAULLE 代码邮政编码:75017 PARIS
75 12 34 56 78 90
“----------”
【问题讨论】:
-
这个不是很清楚,你用什么替换什么?
-
会更容易使用
awk. -
11519 只是一个任意数字还是您实际上在寻找
while read -r L; do ... done<file_that_contains_line_numbers_I_want.txt? -
@tripleee ls 1159 不是任意数字,它对应于包含模式 Adresse: 的行数 -1:(我可以在其中找到我的变量 $dept)。
-
不幸的是,您还没有完成,只是看起来是这样 :-)。请阅读why-is-using-a-shell-loop-to-process-text-considered-bad-practice 以了解为什么应该将您拥有的东西扔到很远的地方并从 awk 脚本重新开始的一些原因。不幸的是,我无法从您的问题中弄清楚您要做什么 - 请 edit 您的问题包括简洁、可测试的样本输入和预期输出。