如何更改文件第一列中的数据

时间:2015-09-15 10:34:54

标签: bash awk sed

我正在尝试在输入文本的第一列中更改两个字符,并在这种情况下为多个文件-250进行更改,使用awk但我收到错误。我的水平是初学者,所以我开始没有包含多个文件,仅从单个文件开始。

输入文字:* .xyz

6    -2.163968    -0.214364    0.000000
1    -1.578434    -2.353198    0.000000
1     1.575214     2.351350    0.000000
6    -4.697660     0.932898    0.000000
1    -3.168017     3.994185    0.000000
1    -5.599375     2.978998    0.000000

因此文本将在第一列中具有不同的字符,如6或1或更多,我想只替换那些C为6和H为1.我尝试更改所有数字6和1或只是打印错误。

awk -F, -vOFS=, '{for(n=1;n<=1;n++)sub(/\6/,"C",$1)}1' *.xyz 

awk ' NF >= 4 { $(NF - 3) = "sub(/\C,"6",$1)"; print; }' *.xyz

哪个不起作用。

我需要改变什么?

2 个答案:

答案 0 :(得分:2)

<强>计划

  
      
  • 使用sed就地替换这些字段
  •   

注意1.xyz和2.xyz包含与发布的相同内容

<强> replace_first.sh

#!/bin/bash

for i in ./*.xyz;
do
  printf "processing $i\n";
  sed -i -e 's/^1\(\s\)/H\1/g' \
         -e 's/^6\(\s\)/C\1/g' "$i";
done;

<强>输出

$ ./replace_first.sh 
processing ./1.xyz
processing ./2.xyz
$ cat 1.xyz 
C    -2.163968    -0.214364    0.000000
H    -1.578434    -2.353198    0.000000
H     1.575214     2.351350    0.000000
C    -4.697660     0.932898    0.000000
H    -3.168017     3.994185    0.000000
H    -5.599375     2.978998    0.000000
$ cat 2.xyz 
C    -2.163968    -0.214364    0.000000
H    -1.578434    -2.353198    0.000000
H     1.575214     2.351350    0.000000
C    -4.697660     0.932898    0.000000
H    -3.168017     3.994185    0.000000
H    -5.599375     2.978998    0.000000

答案 1 :(得分:0)

awk '{ if( $1 == 6 ) $1 = "C"; else $1 = "H"; print}' *.xyz 

如果空间分隔符很重要

awk '{ sub( /^6/, "C");sub( /^1/, "H"); print}' *.xyz