gpt4 book ai didi

linux - 根据linux中的文件名更改文件中的某个数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:59 25 4
gpt4 key购买 nike

我有一个名为 part2.txt 的输入文件,其中包含以下数千行的输入

   46742       1   48276   48343   48199   48198
46744 1 48343 48344 48200 48199
46746 1 48344 48332 48201 48200
48283 3.58077402e+01 -2.97697746e+00 1.50878647e+02
48282 3.67231688e+01 -2.97771595e+00 1.50419488e+02
48285 3.58558188e+01 -1.98122787e+00 1.50894850e+02
48287 3.67678239e+01 -1.98150619e+00 1.50432492e+02

我必须将第二列中的所有整数更改为文件名 (part2.txt) 中的数字,以便所有整数 1更改为 2,而不是 1 也可以是任何其他整数,它不只是 3 行,它可能是数千行,它将变成:

   46742       2   48276   48343   48199   48198
46744 2 48343 48344 48200 48199
46746 2 48344 48332 48201 48200
48283 3.58077402e+01 -2.97697746e+00 1.50878647e+02
48282 3.67231688e+01 -2.97771595e+00 1.50419488e+02
48285 3.58558188e+01 -1.98122787e+00 1.50894850e+02
48287 3.67678239e+01 -1.98150619e+00 1.50432492e+02

请注意,所有列均以空格分隔,并且第一列左侧也有一些空格。我尝试将它与 FNR 一起使用,但它不是那么健壮,并且需要在 linux 中使用 sed 或 awk 的某些方法。

最佳答案

使用 gawk(对于 RT),尽可能保持格式完整:

$ gawk -v RS='\\s+' 'NR == 1 { n = FILENAME; gsub(/[^0-9]/, "", n) } NR % 6 == 3 && int($0) == $0 { $0 = n } { printf $0 RT }' part2.txt
46742 2 48276 48343 48199 48198
46744 2 48343 48344 48200 48199
46746 2 48344 48332 48201 48200
48283 3.58077402e+01 -2.97697746e+00 1.50878647e+02
48282 3.67231688e+01 -2.97771595e+00 1.50419488e+02
48285 3.58558188e+01 -1.98122787e+00 1.50894850e+02
48287 3.67678239e+01 -1.98150619e+00 1.50432492e+02

RS\s+,每个字段就是一条记录,记录后面的空格记为RT,即我们稍后用于打印。代码是

NR == 1 {                      # First record of the file:
n = FILENAME # isolate the number from the file name
gsub(/[^0-9]/, "", n)
}
NR % 6 == 3 && int($0) == $0 { # after that: For every sixth record, if it
# is an integer,
$0 = n # replace it with the isolated number.
# it is NR % 6 == 3 instead of == 2 because
# the file begins with whitespaces that our
# RS matches, so the first record is an empty
# one and the first row in the first column
# is the second record.
}
{ printf $0 RT } # after that: print everything separated by the
# remembered record terminators.

关于linux - 根据linux中的文件名更改文件中的某个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28720042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com