如何用linux中的另一行替换行

时间:2018-03-26 07:55:22

标签: linux bash shell awk replace

我有文件1:

A1  4  A
A1  5  B
A1  6  T
A2  3  T

文件2:

A1  1  NA
A1  2  NA
A1  3  NA
A1  4  A
A1  5  B
A1  6  T
A1  7  NA
A1  8  NA
A1  9  NA
A2  1  NA
A2  2  NA
A2  3  T
A2  4  NA

我想将文件1中的第4,5,6和3行替换为文件2中的值4,5,6和3

新文件3中的预期输出: -

History API

我想在Linux中尝试这个。 我试过谷歌搜索,但我找不到更好的答案。

3 个答案:

答案 0 :(得分:1)

使用join:

join -a 2 file2 file1 | cut -d ' ' -f -2

其中file1是原始文件,file2是包含替换字段的文件。

编辑:自发布此问题以来,问题的要求已经更改;它最初要求加入两个文件,每个文件有两列。对于新格式,这个awk脚本可以工作:

cat file1 file2 | awk '
  BEGIN { OFS = "  " }
  { rows[$1 OFS $2] = $3 }
  END { for (r in rows) print(r, rows[r]) }
' | sort -V >file3

使用问题中指定的文件输出:

$ cat file3
A1  1  NA
A1  2  NA
A1  3  NA
A1  4  A
A1  5  B
A1  6  T
A1  7  NA
A1  8  NA
A1  9  NA
A2  1  NA
A2  2  NA
A2  3  T
A2  4  NA

答案 1 :(得分:1)

使用awk的另一种选择:

company <- c("Aa", "Bb", "Cc", "Dd") 
sector <- c("B", "A", "E", "Z") 
lastmarketcap <- c(18, 4571, 122, 239) 
X200201 <- c(12, 4567, 121, 234) 
X200202 <- c(13, 4568, 121, 236) 
X200203 <- c(16, 4568, 122, 237) 
X200204 <- c(18, 4571, 122, 239) 

databasis <- data.frame(company, sector, lastmarketcap, X200201, X200202, X200203, X200204) 

答案 2 :(得分:0)

如果您已使用结构在文件中插入数据,则可以使用相同的结构使用循环检索第n个条目并分别替换它!

否则,如果您手动插入数据,则只需遍历文件中的(n-1)个&#39; \ n&#39;并检索以下数据!