shell 匹配状态未写入csv文件

qacovj5a  于 2023-05-18  发布在  Shell
关注(0)|答案(1)|浏览(118)

我的input.csv文件数据如下所示。
| 文件名|
| --------------|
| a.c |
| a.cpp |
| a.xml |
| abc.txt |
| abcd.json |
我有另一个textfile.txt文件,如下所示,依此类推

/data/reports/a.c
/data/reports/dir1/a.cpp
/data/reports/dir2/samples/b.java
/data/reports/dir3/yum/c.json
/data/reports/rate/abcd.json
/data/reports/d.xml

我的input.csv需要检查文件名是否存在于我的textfile.txt文件或不,如果存在它需要写在我的outputcsv文件的B列说existing如果不留下为空。对于这个任务,我使用下面的bash脚本。

#!/bin/bash

while IFS=, read -r filename existing || [[ -n "$filename" ]]; do
  if grep -q "$filename" textfile.txt; then
    matched=$(grep "$filename" textfile.txt)
    echo "$filename,$existing,$matched" >> output.csv
  else
    echo "$filename,$existing," >> output.csv
  fi
done < input.csv

但上面的脚本没有写existing或不写在我的output.csv文件的B列。那么问题是什么呢?

预期输出:-

文件名地位
a.c现存的
a.cpp现存的
a.xml
abc.txt
abcd.json现存的

任何帮助都非常感谢。

os8fio9y

os8fio9y1#

$ awk -F/ '
    NR==FNR{a[$NF]; next} 
    FNR==1{print "filename,status"} 
    FNR!=1 && !/^ *$/{printf "%s,%s\n", $0, ($0 in a) ? "existing" : ""}
' /tmp/textfile.txt /tmp/input.csv > output.csv

$ cat output.csv
filename,status
a.c,existing
a.cpp,existing
a.xml,
abc.txt,
abcd.json,existing

相关问题