我有一个包含超过 800k 条目的大文件(访问日志文件)。我需要输出一个 URL 中仅包含干净 URL(不带参数/“?”)的文件。
输出应该只显示没有“?”的条目 在网址中。
参数网址:
我正在尝试编写一个 AWK 脚本来汇总大型文本文件中的数据。结果数据的顺序很重要,所以我不能使用排序。
我尝试过 FNR==NR 的不同变体,但没有任何运气
输入文件
Height 3.5
Weight 12.3
Age 23
:
:
Height 4.5
Weight 15.5
Age 31
:
:
Run Code Online (Sandbox Code Playgroud)
预期输出
Height 3.5 4.5
Weight 12.3 15.5
Age 23 31
Run Code Online (Sandbox Code Playgroud) 这是我的 df -h 输出
df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 98G 82G 17G 83% /
none 98G 82G 17G 83% /dev
none 98G 82G 17G 83% /run
none 98G 82G 17G 83% /run/lock
none 98G 82G 17G 83% /run/shm
none 98G 82G 17G 83% /run/user
tmpfs 98G 82G 17G 83% /sys/fs/cgroup
C:\ 98G 82G 17G 83% /mnt/c
Run Code Online (Sandbox Code Playgroud)
我只想查看
rootfs 98G 82G 17G 83% /
C:\ 98G 82G 17G 83% /mnt/c
Run Code Online (Sandbox Code Playgroud)
怎么做?C:\ 可能不同,但 /mnt/c 挂载点保持不变
如何使用 grep …
我有一个文件,如下所示:
1 genA genB
2 genC genA genS genY
3 genM genC genF
...
Run Code Online (Sandbox Code Playgroud)
我想有以下输出:
1 genA
1 genB
2 genC
2 genA
2 genS
2 genY
3 genM
3 genC
3 genF
...
Run Code Online (Sandbox Code Playgroud)
有没有什么办法可以在 unix 中使用 awk、sed 或类似的方法来完成?
我想知道是否有更好、更干净的方法来仅使用 AWK 删除文件中每行开头和最后的字符串?
这是我到目前为止得到的
cat results.txt | awk '{gsub("https://", "") ;print}' | tr -d ":443"
File: results.txt
https://www.google.com:443
https://www.tiktok.com:443
https://www.instagram.com:443
To get the result
www.google.com
www.tiktok.com
www.instagram.com
Run Code Online (Sandbox Code Playgroud) 我有一个文件:
# Sequence Data: seqnum=1;seqlen=3142;seqhdr="GUT_GENOME148255_1"
>1_59_1276_-
>2_1339_1842_-
>3_1873_2436_-
>4_2470_2928_-
# Sequence Data: seqnum=2;seqlen=3085;seqhdr="GUT_GENOME148255_2"
>1_3_266_-
>2_256_1038_-
# Sequence Data: seqnum=3;seqlen=3050;seqhdr="GUT_GENOME148255_3"
>1_22_1062_-
>2_1072_1746_-
>3_1767_3017_-
# Sequence Data: seqnum=4;seqlen=2934;seqhdr="GUT_GENOME148255_4"
>1_83_436_-
>2_438_1430_-
>3_1432_1872_-
>4_1986_2933_+
Run Code Online (Sandbox Code Playgroud)
我想添加与seqnum以 开头的每一行对应的数字>,这样它看起来像这样:
# Sequence Data: seqnum=1;seqlen=3142;seqhdr="GUT_GENOME148255_1"
>1-1_59_1276_-
>1-2_1339_1842_-
>1-3_1873_2436_-
>1-4_2470_2928_-
# Sequence Data: seqnum=2;seqlen=3085;seqhdr="GUT_GENOME148255_2"
>2-1_3_266_-
>2-2_256_1038_-
# Sequence Data: seqnum=3;seqlen=3050;seqhdr="GUT_GENOME148255_3"
>3-1_22_1062_-
>3-2_1072_1746_-
>3-3_1767_3017_-
# Sequence Data: seqnum=4;seqlen=2934;seqhdr="GUT_GENOME148255_4"
>4-1_83_436_-
>4-2_438_1430_-
>4-3_1432_1872_-
>4-4_1986_2933_+
Run Code Online (Sandbox Code Playgroud)
该过程应该遍历整个文件。我怀疑这是可以做到的,awk但我的努力是没有用的。
我有 2 个文本文件。
下面的文本文件是projectnameid.txt. 第一列是项目名称。项目 ID 中的第二列
basket-items 9189
cloudfabric-notifications 10789
cloud-ports 10965
common 9081
customer-port-management 8550
deploy-quote 8348
geographical-location-management 8549
internet-connections 9293
ipaddress 8536
ip-addresses 9294
order-notifications 11725
order-status 8353
port-inventory 8486
port-locations 8490
pricing-quotes 8493
product-availability 8488
product-catalogue 8489
product-countrylist 8492
stub-service 8510
customer-port-management-sf 10488
internet-connections-order-sf 11166
ip-addresses-order-sf 11165
Run Code Online (Sandbox Code Playgroud)
下面的文本文件是endfilter3-all-b.txt
337718 10965 "refs/merge-requests/13/head" "2023-07-19T11:39:41.739Z"
318933 8536 "develop" "2023-07-05T11:41:28.482Z"
366210 8549 "develop" "2023-08-11T13:49:18.905Z"
338835 8510 "main" "2023-07-20T06:45:59.823Z"
135208 8348 "main" "2023-02-17T11:25:07.723Z"
115402 8493 "main" "2023-02-07T06:52:05.486Z"
361979 …Run Code Online (Sandbox Code Playgroud) 我想集合数据从一个CSV文件到另一个,使用命令行工具,如bash,sed,awk等等中的每个文件中的每一行与一个唯一的ID开始在第1列,并且如果在所述目的地的行该ID相匹配,则行应该被替换,否则应该附加。输入数据未排序,但结果的排序顺序无关紧要,因此如果有帮助,文件可以作为脚本的一部分进行排序。
例如,给定当前状态aggregate.csv:
1,olddata
3,olddata
2,olddata
Run Code Online (Sandbox Code Playgroud)
和文件new.csv:
4,newdata
2,changeddata
3,changeddata
Run Code Online (Sandbox Code Playgroud)
我想aggregate.csv出来如下(以任何排序顺序):
1,olddata
2,changeddata
3,changeddata
4,newdata
Run Code Online (Sandbox Code Playgroud)
这些行可能包含大量列,因此一次替换一个单元格并不理想。CSV 保证不包含引用的换行符,因此逐行搜索并一次替换整行是一种有效的方法。
抱歉,如果这是重复的,但我找不到另一个完全使用这种 CSV 合并方法的问题。
我已经尝试调整这个问题的答案,但它首先需要通过逐行解析两个文件、排序、删除重复项和保存来生成所有 ID 的“模板文件”——我希望有一种更简单的方法是可能的。
这个问题在 sed 和 awk 中有答案,我也复制了这些答案,并管理了正则表达式替换部分,但不是在不存在匹配的情况下向文件追加新行的方法。
谢谢!
我在 linux 上做了一些研究,我遇到了这个 awk 脚本:
$ awk -F: '$3 >= 1000 && !($1 == "nobody" && $3 == 65534) { SUM+=1 } END { print SUM }' /etc/passwd
Run Code Online (Sandbox Code Playgroud)
它会通过统计 UID 大于或等于 1000 的用户并忽略特殊的 nobody 帐户来获取本地用户帐户的数量。
但是,我不明白代码。有人可以向我解释一下吗?
假设我的文件对数字进行了排序,如下所示:
1
22
36
45
53
Run Code Online (Sandbox Code Playgroud)
我希望能够获得 36。另一方面,如果文件的行数为偶数,例如:
1
22
36
45
53
67
Run Code Online (Sandbox Code Playgroud)
我想要平均值 (36+45)/2。
我想我当然可以使用 wc 来获取行数并处理中间的行。但是有没有更优雅的方法来获得中位数?