我想按照第一列值创建文件,假设我在文件中有ASCII数据,其中包含..
400.00 1234
400.00 2134
400.05 4314
400.05 9766
401.00 9874
401.00 7982
402.50 1234
现在我想写一个shell或awk脚本,它创建一个名为" Timestep_401.00" 的文件,并且只包含属于该列值的记录,即它应该包含....
401.00 9874
401.00 7982
我正在尝试下面的脚本..
awk '{ if($1=401.00) {print >> "Timestep_"$1; close($1)}}' awk.txt
但它提供了错误的输出(虽然 Timestep_400 文件是作为输出创建的),因为它包含文件中的所有数据。只是第一列的值和输入文件第二列的所有记录。 Timestep_400文件的内容
401.00 1234
401.00 2134
401.00 4314
401.00 9766
401.00 9874
401.00 7982
401.00 1234
答案 0 :(得分:1)
看起来您的脚本出现的主要问题是拼写错误:=
是作业,而不是比较。
就个人而言,我会使用字符串比较,以避免考虑与浮点值相关的问题(并且因为awk无论如何都将字段视为字符串)。
我也会丢失不必要的if
,因为awk脚本的工作方式与condition { action }
类似。
awk '$1 == "401.00" { print > ("Timestamp_"$1) }' awk.txt
我猜你要使用>
代替>>
。 >
表示“打开并截断文件”,但在后续行中,文件已经打开,因此将附加到。如果在运行脚本之前已存在Timestamp_401.00
并且您要保留其内容,请使用>>
。
我想您的意思是close
您刚刚写入的文件但是没有必要每行执行一次 - 事实上,这意味着>
重新打开(并截断)了每次执行块时都会生成文件。