linux Macbook Bash或Python脚本自动化GREP过程并输出到CSV文件

7lrncoxx  于 2023-04-20  发布在  Linux
关注(0)|答案(1)|浏览(261)

我有一个大的.csv文件,用逗号“,”分隔。该文件无法打开,因为它是如此之大,所以为了刮取我需要的数据,我在终端中使用以下Grep命令:

grep "A1" file.csv | grep "B1" | grep "C1" | grep "D1"  >> grep.txt
awk -F"," '{print $11}' grep.txt

我想做的是把它放在一个脚本中,并将每个grep索引的每组输出值输出到一个新CSV文件的特定列中。但是,我不确定如何做到这一点。请建议如何开始
原始数据示例:

row1 -> A1,B1,C1,D1,E1,F1,G1,Value1,Value2,Value3,Value4,Value5
row2 -> A2,B2,C2,D2,E2,F2,G2,Value1,Value2,Value3,Value4,Value5
..
..
rowN -> ""

我想在输出CSV文件中有这样的内容:

Column1:
row1->Value3
row2->Value3
...

Column2:
row2->value4
row2->Value4
...

and so forth
velaa5lx

velaa5lx1#

这可能不是100%的你想要的,但它应该会引导你朝着正确的方向前进。基本上,在for循环中运行你的grep值,使用grep -n获得行号,将$i变量带到awk命令中,并将每个grepped值打印到单独的临时文件中。然后使用paste将它们合并到1个csv文件中。

for i in A1 B1 C1 D1 E1 F1 G1 Value1 Value2 Value3 Value4 Value5
do rm $i.tmp
grep -n $i file.csv |awk -F":" -v i="$i" '{print $1"=>" i","}' >$i.tmp
done

paste -d'\0' A1.tmp B1.tmp C1.tmp D1.tmp E1.tmp F1.tmp G1.tmp Value1.tmp Value2.tmp Value3.tmp Value4.tmp Value5.tmp >Output.File

或者,如果你想使用一个数组,这样你只需要在一个地方提到/维护grep单词列表,那么你可以这样做:

declare -a ARR=("A1" "B1" "C1" "D1" "E1" "F1" "G1" "Value1" "Value2" "Value3" "Value4" "Value5")
for i in ${ARR[@]}
do
grep -n $i file.csv |awk -F":" -v i="$i" '{print $1"==>" i","}' >$i.tmp
done

paste -d'\0' ${ARR[0]}.tmp ${ARR[1]}.tmp ${ARR[2]}.tmp ${ARR[3]}.tmp ${ARR[4]}.tmp ${ARR[5]}.tmp ${ARR[6]}.tmp ${ARR[7]}.tmp ${ARR[8]}.tmp ${ARR[9]}.tmp ${ARR[10]}.tmp ${ARR[11]}.tmp > Output.File

相关问题