gpt4 book ai didi

linux - 使用 awk 使用通过函数传递的参数删除多行

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:11 25 4
gpt4 key购买 nike

我的 input.csv 文件以分号分隔,第一行是属性标题。第一列包含客户编号。该函数是通过我从终端激活的脚本调用的。

我想删除包含作为脚本参数输入的客户编号的所有行。 编辑:然后将文件导出为不同的文件,同时保持原始文件不变。

bash deleteCustomers.sh 1 3 5

目前只有最后一个参数从 csv 文件中过滤出来。我知道发生这种情况是因为每次循环运行时输出文件都会被覆盖,从而恢复所有先前删除的参数。

如何匹配所有要删除的行,然后删除它们(或打印除这些行之外的所有内容),然后将其输出到一个包含所有编辑的文件?

delete_customers () {
echo "These customers will be deleted: "$@""

for i in "$@";
do
awk -F ";" -v customerNR=$i -v input="$inputFile" '($1 != customerNR) NR > 1 { print }' "input.csv" > output.csv
done
}

delete_customers "$@"

这是一些示例输入(第一段代码是 csv 文件中的第一行)。在输出的 CSV 文件中,我想要相同的格式,一些客户的行被完全删除。

Klantnummer;Nationaliteit;Geslacht;Title;Voornaam;MiddleInitial;Achternaam;Adres;Stad;Provincie;Provincie-voluit;Postcode;Land;Land-voluit;email;gebruikersnaam;wachtwoord;Collectief;label;ingangsdatum; pakket;aanvullende verzekering;status;saldo;geboortedatum

1;Dutch;female;Ms.;Josanne;S;van der Rijst;Bliek 189;Hellevoetsluis;ZH;Zuid-Holland;3225 XC;NL;Netherlands;JosannevanderRijst@dayrep.com;Sourawaspen;Lae0phaxee;Klant;CZ;11-7-2010;best;tand1;verleden;-137;30-12-1995

2;Dutch;female;Mrs.;Inci;K;du Bois;Castorweg 173;Hengelo;OV;Overijssel;7557 KL;NL;Netherlands;InciduBois@gustr.com;Hisfireeness;jee0zeiChoh;Klant;CZ;30-8-2015;goed ;geen;verleden;188;1-8-1960

3;Dutch;female;Mrs.;Lusanne;G;Hijlkema;Plutostraat 198;Den Haag;ZH;Zuid-Holland;2516 AL;NL;Netherlands;LusanneHijlkema@dayrep.com;Digum1969;eiTeThun6th;Klant;Achmea;12-2-2010;best;mix;huidig;-335;9-3-1973

4;Dutch;female;Dr.;Husna;M;Hoegee;Tiendweg 89;Ameide;ZH;Zuid-Holland;4233 VW;NL;Netherlands;HusnaHoegee@fleckens.hu;Hatimon;goe5OhS4t;Klant;VGZ;9-8-2015;goed ;gezin;huidig;144;12-8-1962

5;Dutch;male;Mr.;Sieds;D;Verspeek;Willem Albert Scholtenstraat 38;Groningen;GR;Groningen;9711 XA;NL;Netherlands;SiedsVerspeek@armyspy.com;Thade1947;Taexiet9zo;Intern;CZ;17-2-2004;beter;geen;verleden;-49;12-10-1961

6;Dutch;female;Ms.;Nazmiye;R;van Spronsen;Noorderbreedte 180;Amsterdam;NH;Noord-Holland;1034 PK;NL;Netherlands;NazmiyevanSpronsen@jourrapide.com;Whinsed;Oz9ailei;Intern;VGZ;17-6-2003;beter;mix;huidig;178;8-3-1974

7;Dutch;female;Ms.;Livia;X;Breukers;Everlaan 182;Veenendaal;UT;Utrecht;3903

最佳答案

在循环中尝试这个..

awk -v variable=$var '$1 != variable' 输入.csv

awk       - to make decision based on columns
-v - to use a variable into a awk command
variable - store the value for awk to process
$var - to search for a specific string in run-time
!= - to check if not exist
input.csv - your input file

这是 awk 的行为,当您使用 -v 时,它可以在运行时使用变量并提供不包含您传递的值的输出。这样,您将获得所有与您的变量不匹配的值。希望这会有所帮助。 :)

谢谢

关于linux - 使用 awk 使用通过函数传递的参数删除多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53099419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com