我正在运行以下命令,只要它们在第一个文件中是内容的,它就会很好用:
awk -F, 'FNR==NR {a[tolower($1)]++; next} !a[tolower($1)]' OutSideSyncUsers.csv NewUsers.csv
Run Code Online (Sandbox Code Playgroud)
如果第一个文件为空,则该命令不起作用.我在网上找到了这个参考:
如果第一个文件为空,那么使用双文件习惯用法的所有程序将无法正常工作(在这种情况下,awk将在读取第二个文件时执行与NR == FNR相关的操作).要纠正这个问题,您可以通过添加一个测试来强化NR == FNR条件,该测试检查FILENAME是否等于ARGV [1].
我不确定我理解查询中添加测试检查的方式(或在哪里)等于ARGV [1]
任何帮助都会得到满足
仅当特定列中的值/字符串存在时,需要有关awk(或sed)命令的帮助才能选择行.
例:
我只想在第5列中存在单词'true'时返回该行,如果第5列中不存在'true',则不要返回该行
输入:
john,jacob,jingle,schmidt,true
jason,jack,john,true,false
oscar,meir,true,weiner,false
tiffany,amber,false,theissen,true
jack,john,sally,true,true
Run Code Online (Sandbox Code Playgroud)
期望的输出:
john,jacob,jingle,schmidt,true
tiffany,amber,false,theissen,true
jack,john,sally,true,true
Run Code Online (Sandbox Code Playgroud)
我知道如何拉回一个有一个单词的行,并且没有这样的单词:
awk '/true/ && !/false/'
Run Code Online (Sandbox Code Playgroud)
但那不会工作,我知道如何删除一个单词,如果它在特定列中
awk 'BEGIN{FS=OFS=","} {sub(/true */, "", $5)} 1'
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将这两者结合起来.
我最好的猜测是:
awk 'BEGIN{FS=OFS=","} {"/true/",$5}
Run Code Online (Sandbox Code Playgroud)
最坏的情况....:)
awk 'BEGIN{FS=OFS=","} {sub(/true */, "Unmatchablestring", $5)} 1' | awk '/Unmatchablestring/'
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的csv文件:(名为test2.csv)
lastname,firstname,83494989,1997-05-20,2015-05-07 15:30:43,Sentence Skills 104,Sentence Skills 104,Elementary Algebra 38,Elementary Algebra 38,Sentence Skills 104,Sentence Skills 104,Elementary Algebra 38,Elementary Algebra 38,
Run Code Online (Sandbox Code Playgroud)
我想删除重复的条目
我最接近的是以下awk命令
awk '{a[$0]++} END {for (i in a) print RS i}' RS="," test2.csv
Run Code Online (Sandbox Code Playgroud)
它可以工作,但会导致新的问题,它会将值排除在外,并将它们放在如下的行中:
,Elementary Algebra 38
,2015-05-07 15:30:43
,Sentence Skills 104
,FirstName
,LastName
,1997-05-20
,83494989
Run Code Online (Sandbox Code Playgroud)
我需要保持他们的订单并将它们保持在一行(我可以解决行问题,但不知道如何解决订单问题)
更新解决方案:
anubhava的答案很有效,我添加了一个关于从日期中删除时间的问题,Ed Morton帮忙解决了这个问题,这里是完整的查询
awk 'BEGIN{RS=ORS=","} {sub(/ ..:..:..$/,"")} !seen[$0]++' test2.csv
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的csv文件:
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Sentence Skills 67,Reading Comprehension 59,Elementary Algebra 41
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Sentence Skills 44,Reading Comprehension 40
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 39
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Elementary Algebra 41,Sentence Skills 82
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Sentence Skills 104,Elementary Algebra 82
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Sentence Skills 85
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Elementary Algebra 51
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 71,Sentence Skills 54,Elementary Algebra 33
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 70,Elementary Algebra 23,Arithmetic 42,Sentence Skills 75
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Sentence Skills 96,Reading Comprehension 88
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Elementary Algebra 53,Sentence Skills 97
Run Code Online (Sandbox Code Playgroud)
前5列始终相同,后5列始终采用不同的顺序.我需要保持前5列相同,并重新排序最后5列,始终按以下顺序阅读理解,句子技巧,算术,大学水平数学,初等代数
如果其中一个字符串不存在,请添加逗号
所以最终结果如下:
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 59,Sentence Skills 67,,,Elementary Algebra 41
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 40,Sentence Skills 44,,,
Last,First,A00XXXXXX,1492-12-03,2015-06-23,Reading Comprehension 39,,,,
Last,First,A00XXXXXX,1492-12-03,2015-06-23,,Sentence Skills 82,,,Elementary Algebra 41 …Run Code Online (Sandbox Code Playgroud) 我有一个像下面的csv文件:
last,first,A00XXXXXX,1888-01-01,2015-05-13,Elementary Algebra 34,
last,first,A00XXXXXX,1888-01-01,2015-05-13,Reading Comprehension 97,Sentence Skills 104,College Level Math 76,Elementary Algebra 115,
Run Code Online (Sandbox Code Playgroud)
如果行中不存在"阅读理解"这一短语,请在第5个逗号后添加逗号
我试图用AWK来解决这个问题,但似乎无法弄明白.我假设我需要使用gsub来循环,但是我无法弄清楚如何在$ 5之后添加','
最终目标看起来像这样:
last,first,A00XXXXXX,1888-01-01,2015-05-13,,Elementary Algebra 34,
last,first,A00XXXXXX,1888-01-01,2015-05-13,Reading Comprehension 97,Sentence Skills 104,College Level Math 76,Elementary Algebra 115,
Run Code Online (Sandbox Code Playgroud)