Articles of awk

从txt文件中删除重复的行

我正在处理包含按行分隔的数据的大型文本文件(〜20MB)。 大多数数据项是重复的,我想删除这些重复只保留一个副本。 此外,为了使问题稍微复杂一些,重复添加一些附加信息。 在这种情况下,我需要保持包含额外信息的条目并删除旧版本。 例如,我需要从这个: BOB 123 1DB JIM 456 3DB AX DAVE 789 1DB BOB 123 1DB JIM 456 3DB AX DAVE 789 1DB BOB 123 1DB EXTRA BITS 对此: JIM 456 3DB AX DAVE 789 1DB BOB 123 1DB EXTRA BITS NB。 最后的顺序并不重要。 什么是有效的方法来做到这一点? 我可以使用awk,python或任何标准的linux命令行工具。 谢谢。

使用AWK从两个文件中分解n个列

我有两个N列数的文件 文件1: A 1 2 3 ……. Na1 B 2 3 4 ……. Nb1 文件2: A 2 2 4 ……. Na2 B 1 3 4 ……. Nb2 我想要一个输出从File1的第一列值将被从File2的第一列中减去,这样直到列N如下所示: A -1 0 -1 …….. (Na1-Na2) B 1 0 0 …….. (Nb1-Nb2) 如何在Linux环境中执行AWK或Perl脚本?

如何使用awk将文件的某个字段更改为大写?

我有这样的文本文件: 1 http http 3 4 5 2 dns dns 4 3 ftp ftp 4 5 6 8 我想输出是这样的: 1 HTTP http 3 4 5 2 DNS dns 4 3 FTP ftp 4 5 6 8 我想把第二个字段从小写变成大写,只有第二个字段。 请注意,某一行中的字段数量不固定。 我可以用awk完成这个目标吗?

在Mac OS X上使用AWK分割文件

我想在特定的分隔符上使用AWK拆分文件。 awk代码如下所示: awk '/SEPARATOR/{n++}{print > "part" n ".txt" }' in.txt 这个代码在我的Linux系统上完美的工作。 但是,当在Mac OS X上运行完全相同的代码时,出现以下错误: awk: syntax error at source line 1 context is /SEPARATOR/{n++}{print > "part" >>> n <<< ".txt" } awk: illegal statement at source line 1 我认为这是在OS X附带的awk和Linux的mawk之间的某种区别。 在打印中删除string连接可以让awk程序在两个平台上工作,但我更愿意保留前缀和surfix。 如何编写一个awk程序,将分隔符上的文件分成多个编号的部分,并在两个平台上工作?

在SLURM sbatch脚本中使用Bashvariables

我试图从另一个文件中获取一个值,并在SLURM提交脚本中使用它。 但是,我得到一个错误,该值是非数值的,换句话说,它不被解除引用。 这是脚本: #!/bin/bash # This reads out the number of procs based on the decomposeParDict numProcs=`awk '/numberOfSubdomains/ {print $2}' ./meshModel/decomposeParDict` echo "NumProcs = $numProcs" #SBATCH –job-name=SnappyHexMesh #SBATCH –output=./logs/SnappyHexMesh.log # #SBATCH –ntasks=`$numProcs` #SBATCH –time=240:00 #SBATCH –mem-per-cpu=4000 #First run blockMesh blockMesh #Now decompose the mesh decomposePar #Now run snappy in parallel mpirun -np $numProcs snappyHexMesh -parallel […]

如何保存这个awk命令的输出到文件?

我想把这个命令保存到另一个文本:awk'{print $ 2}'从文本中提取。 现在我想保存输出太另一个文本。 谢谢

Bash:将键值行转换为CSV格式

编者按:我已经澄清了问题的定义,因为我觉得这个问题很有意思,这个问题值得重新打开。 我有一个文本文件,其中包含以下格式的键值行 – 请注意,下面的#行仅用于显示重复块,不是input的一部分 : Country:United Kingdom Language:English Capital city:London # Country:France Language:French Capital city:Paris # Country:Germany Language:German Capital city:Berlin # Country:Italy Language:Italian Capital city:Rome # Country:Russia Language:Russian Capital city:Moscow 使用shell命令和实用程序,我怎样才能将这样的文件转换为CSV格式,所以它看起来像这样? Country,Language,Capital city United Kingdom,English,London France,French,Paris Germany,German,Berlin Italy,Italian,Rome Russia,Russian,Moscow 换一种说法: 将键名称设置为CSV标题行的列名称。 使每个块的值分别为数据行。 编辑:我的想法是将条目分开,例如:国家:法国将成为国家法国,然后grep / sed标题。 但是,我不知道如何将标题从一个列移动到几个单独的列。

可能“循环”和“输出”不能在我的bash脚本中正常工作

我写了下面的脚本: #!/bin/bash echo "Reading data – headers – both" if [ $# -ne 3 ]; then echo "Usage: ./nmap <port-range> <ip-list> <d || h || b>" exit 1 fi rm -f /tmp/right.txt 1>/dev/null 2>/dev/null rm -f /tmp/wrong.txt 1>/dev/null 2>/dev/null output="" if [ $3 == h ]; then while read -r -u3 port; do while read […]

Shell脚本linux减去参数grep

我需要帮助从文件中提取巧合。 我用tcpdump命令捕获networkingstream量 tcpdump -Xvv -i eth0> captureFile.txt 给定IP头的任何字段,TCP和以太网指定在捕获的stream量中find的所有值,并计算该字段值的多less倍。 例如,如果假设TTL = 128 TTL = 64,那么指示有多less个数据包具有每个这些值的字段。 该文件的内容: 09:26:13.245546 IP (tos 0x0, ttl 1, id 3439, offset 0, flags [none], proto UDP (17), length 1018) 10.0.0.226.58935 > 239.255.255.250.3702: UDP, length 990 0x0000: 4500 03fa 0d6f 0000 0111 ada8 0a00 00e2 E….o………. 0x0010: efff fffa e637 0e76 03e6 7ec0 […]

如何使用schell脚本从文件读取元素,做一些计算和回写?

我只是脚本语言的新手。 现在我有一个文件,里面是: > A1 B1 C1 > A2 B2 C2 > A3 B3 C3 我只想使用shell脚本(bash)按元素读取文件元素。 然后,我想对元素A1,A2和A3进行一些计算,然后将它们写回新文件(或旧文件)。 所以新文件会是(假devise算结果是D1,D2和D3): D1 B1 C1 D2 B2 C2 D3 B3 C3 计算是通过命令“date -d @(A's value)”将Unix历元时间(A的值)转换为人类可读的时间(D的值)。 我尝试使用awk命令: awk '{$1=`date -d @$1`}' test.txt 但它似乎有一些语法错误:>错误是: awk: {$1=`date -d @$3`} awk: ^ invalid char '`' in expression