如何用 "N/A" 跳过 sed 中的第一行来替换数据中的“00”?
How to replace "00" in data with "N/A" skipping first row in sed?
我正在处理 GWAS 数据,我的数据如下所示:
IID,kgp11004425,rs11274005,kgp183005,rs746410036,kgp7979600
1,00,AG,GT,AK,00
32,AG,GG,AA,00,AT
300,TT,AA,00,AG,AA
400,GG,AG,00,GT,GG
期望的输出:
IID,kgp11004425,rs11274005,kgp183005,rs746410036,kgp7979600
1,N/A,AG,GT,AK,N/A
32,AG,GG,AA,N/A,AT
98,TT,AA,N/A,AG,AA
3,GG,AG,N/A,GT,GG
在这里,我试图用“N/A”替换“00”,但由于我在 first_row/header_row 和第一列中有 00,即 IId,所以它在这里替换为 N/A 像 kgp11N/A4425, rs11274N/A5,kgp183N/A5....
和 Id 列值 300、400、500 为 3N/A、4N/A、5N/A。我使用的 bash 命令:
sed 's~00~N/A~g' allSNIPsFinaldata.csv
任何人都可以帮助“如何不 include/Skip 第一行或 header 行和第一列并应用此效果。请帮助
有了 2 个捕获组,您可以使用这个 sed
:
sed -E 's~(^|[[:blank:]])00([[:blank:]]|$)~N/A~g' file
IID, kgp11004425, rs11274005, kgp183005, rs746410036, kgp7979600
1 N/A AG GT AK N/A
32 AG GG AA N/A AT
98 TT AA N/A AG AA
3 GG AG N/A GT GG
详情:
(^|[[:blank:]])
: 匹配开始或捕获组 #1 中的空格
00
:匹配00
([[:blank:]]|$)
: 匹配结束符或捕获组#2 中的空格
N/A
:替换以放回捕获组 #1 的值,然后是 N/A
,然后是捕获组 #2 的值
您也可以从第二行开始跳过第一行:
sed '2,$s~00~N/A~g' allSNIPsFinaldata.csv
如果您不想部分单词匹配,可以在 00
in different ways.
周围实施单词边界
您可以为 select 应用命令的行指定一个地址。因此,您可以选择像这样排除第一行:
sed '1!s~00~N/A~g' allSNIPsFinaldata.csv
作为旁注,我想指出尽管有文件名,您的示例实际上并不是 CSV;你的 header 是 comma-delimited 但文件的其余部分使用了空格。
使用sed
$ sed 's|\<00\>|N/A|g' input_file
IID, kgp11004425, rs11274005, kgp183005, rs746410036, kgp7979600
1 N/A AG GT AK N/A
32 AG GG AA N/A AT
98 TT AA N/A AG AA
3 GG AG N/A GT GG
我正在处理 GWAS 数据,我的数据如下所示:
IID,kgp11004425,rs11274005,kgp183005,rs746410036,kgp7979600
1,00,AG,GT,AK,00
32,AG,GG,AA,00,AT
300,TT,AA,00,AG,AA
400,GG,AG,00,GT,GG
期望的输出:
IID,kgp11004425,rs11274005,kgp183005,rs746410036,kgp7979600
1,N/A,AG,GT,AK,N/A
32,AG,GG,AA,N/A,AT
98,TT,AA,N/A,AG,AA
3,GG,AG,N/A,GT,GG
在这里,我试图用“N/A”替换“00”,但由于我在 first_row/header_row 和第一列中有 00,即 IId,所以它在这里替换为 N/A 像 kgp11N/A4425, rs11274N/A5,kgp183N/A5.... 和 Id 列值 300、400、500 为 3N/A、4N/A、5N/A。我使用的 bash 命令:
sed 's~00~N/A~g' allSNIPsFinaldata.csv
任何人都可以帮助“如何不 include/Skip 第一行或 header 行和第一列并应用此效果。请帮助
有了 2 个捕获组,您可以使用这个 sed
:
sed -E 's~(^|[[:blank:]])00([[:blank:]]|$)~N/A~g' file
IID, kgp11004425, rs11274005, kgp183005, rs746410036, kgp7979600
1 N/A AG GT AK N/A
32 AG GG AA N/A AT
98 TT AA N/A AG AA
3 GG AG N/A GT GG
详情:
(^|[[:blank:]])
: 匹配开始或捕获组 #1 中的空格00
:匹配00
([[:blank:]]|$)
: 匹配结束符或捕获组#2 中的空格N/A
:替换以放回捕获组 #1 的值,然后是N/A
,然后是捕获组 #2 的值
您也可以从第二行开始跳过第一行:
sed '2,$s~00~N/A~g' allSNIPsFinaldata.csv
如果您不想部分单词匹配,可以在 00
in different ways.
您可以为 select 应用命令的行指定一个地址。因此,您可以选择像这样排除第一行:
sed '1!s~00~N/A~g' allSNIPsFinaldata.csv
作为旁注,我想指出尽管有文件名,您的示例实际上并不是 CSV;你的 header 是 comma-delimited 但文件的其余部分使用了空格。
使用sed
$ sed 's|\<00\>|N/A|g' input_file
IID, kgp11004425, rs11274005, kgp183005, rs746410036, kgp7979600
1 N/A AG GT AK N/A
32 AG GG AA N/A AT
98 TT AA N/A AG AA
3 GG AG N/A GT GG