我有一组格式如下的数据:
r 0.000 0 0 1.000 0.010
第 2 列和第 5 列中的数字有所不同,因为它是位置数据(第 2 列)和行程时间数据(第 5 列)。然而,每次第 5 列有 1.000 或 -1.000 时,它都是表示一组新信息的特定行,因此我需要使用 awk 来检查这些值并编辑相应的行。
我尝试过各种形式的
awk '{if ($5=-1.000) ($1="s" && $5=0)}' inputfile > outputfile
包括仅尝试将第一列从 r 更改为 s。结果应该是
s 0.000 0 0 0 0.010
对于第 5 列的每一行,其值为 -1.000,但到目前为止,我的结果只是完全空白的输出文件。有时我的输出也会用 -1 替换整个第 5 列,这会擦除所有重要数据。
编辑:还要澄清数据有数百行长。这是数据的前 10 行,显示了它现在的组成:
r 0.000 0 0 1.000 0.010
r 0.050 0 0 0.044 0.010
r 0.100 0 0 0.075 0.010
r 0.150 0 0 0.108 0.010
r 0.200 0 0 0.117 0.010
r 0.250 0 0 0.160 0.010
r 0.300 0 0 0.197 0.010
r 0.350 0 0 0.214 0.010
r 0.400 0 0 0.259 0.010
r 0.450 0 0 0.268 0.010
编辑:谢谢您的帮助,我最终明白了我做错了什么。但我不想删除这个问题。
假设:
1.000
或 -1.000
输入示例:
$ cat inputfile
r 0.000 0 0 1.000 0.010
r 0.000 0 0 -1.000 0.010
r 0.050 0 0 0.044 0.010
r 0.100 0 0 0.075 0.010
r 0.150 0 0 0.108 0.010
r 0.200 0 0 0.117 0.010
r 0.250 0 0 0.160 0.010
r 0.300 0 0 0.197 0.010
r 0.350 0 0 0.214 0.010
r 0.400 0 0 0.259 0.010
r 0.450 0 0 0.268 0.010
调整OP的当前代码:
awk '
{ if ($5 == -1.000 || $5 == 1.000) { # test 5th column
$1="s" # modify 1st and
$5=0 # 5th columns
}
}
1 # print current line
' inputfile
# or as a one-liner:
awk '{ if ($5 == -1.000 || $5 == 1.000) { $1="s"; $5=0 } } 1' inputfile
这些都会生成:
s 0.000 0 0 0 0.010
s 0.000 0 0 0 0.010
r 0.050 0 0 0.044 0.010
r 0.100 0 0 0.075 0.010
r 0.150 0 0 0.108 0.010
r 0.200 0 0 0.117 0.010
r 0.250 0 0 0.160 0.010
r 0.300 0 0 0.197 0.010
r 0.350 0 0 0.214 0.010
r 0.400 0 0 0.259 0.010
r 0.450 0 0 0.268 0.010