簡體   English   中英

awk或sed幫助用於復制CSV或TSV文件的第一行

[英]awk or sed help for munging first line of a CSV or TSV file

我正在搞亂awk,因為我覺得使用這個工具挖出制表符分隔或csv文件的標題要簡單得多。

我有兩種類型的文件(逗號或制表符分隔),我想要做的就是將標題(NR = 1)修改為:

  1. 降低所有單詞的大小寫
  2. 用每個字段名稱替換任何帶下划線的空格。 癌症類型改變為* cancer_type *

癌症類型,裝配版本,染色體,染色體起始,染色體末端

我到目前為止所做的就是列出第一行

awk'NR == 1'test2.csv

好吧,我不知所措。 在任何情況下,我都可能在進行一些下游修改之前運行此腳本(sed或awk)。

任何幫助(或指向一個好的教程/一個襯墊)將非常感激。

編輯

嗨,我應該編輯以澄清這一點。 我將從一個文件開始,以相同的文件結束,但標題已更改。

我可以得到兩個版本的文件。

CSV

癌症類型,裝配版本,染色體,染色體起始,染色體末端

后:

cancer_type,assembly_version,chromosome,chromosome_start,chromosome_end

TSV

癌症類型\\ t組裝版\\ t染色體\\ t染色體開始\\ t染色體結束

后:

cancer_type \\ t assembly_version \\ t chromosome \\ t chromosome_start \\ t chromosome_end

話雖如此,我認為方法幾乎正在發揮作用..

編輯2操作系統是OS X 10.7。+

GNU 代碼

sed -r '1 {s/.*/\L&/;s/\b\s\b/_/g}' infile>outfile

$ echo Cancer Type, Assembly Version, Chromosome, Chromosome start, Chromosome end|sed -r '1 {s/.*/\L&/;s/\b\s\b/_/g}'
cancer_type, assembly_version, chromosome, chromosome_start, chromosome_end

如果你只想修改標題並按原樣打印剩余的行,那么嘗試使用GNU awk

awk 'BEGIN{FS=OFS=","}NR==1{$0=tolower($0);gsub(/\y \y/,"_",$0)}1' csv 

如果我明白OP想要替換原始文件的標題,而不僅僅是將結果打印到控制台。

起初我試圖用解決它,因為我知道它更好。 沒有就地編輯功能,因此需要一些解決方法:

# Unsafe hack
#{ rm infile; awk 'NR==1{...}1' >infile;} <infile
#Ed Morton's correction
awk 'NR==1{...}1' infile >tmp && mv tmp infile

這有效,但它為rm命令使用了1個額外的fork 最好使用就地編輯。 支持此功能。 使用perl有點矯枉過正,所以我糾正了一點captha解決方案:

sed -i '1{s/\b \b/_/g;s/[[:upper:]]/\L&/g;}' infile

之前的infile:

Cancer Type, Assembly Version, Chromosome, Chromosome start, Chromosome end
One 1,Two 2

之后的infile:

cancer_type, assembly_version, chromosome, chromosome_start, chromosome_end
One 1,Two 2

也許我不完全理解你的問題,但據我所知,這應該解決它:

head -1 test2.csv | sed -e 's/\(.*\)/\L\1/' -e 's/ /_/g' > tmp.txt
tail -n +2 test2.csv >> tmp.txt
  • head挑第一線
  • 第一個sed選項使所有內容都小寫
  • 第二個sed選項將所有空格轉換為下划線
  • tail打印一切起始於第2行

tmp.txt現在包含完整的結果。

嘿伙計們兩個命令都有效,但對於OS X你必須這樣做

brew install gnu-sed

然后運行你的sed命令

gsed -i '1{s/\b \b/_/g;s/[[:upper:]]/\L&/g;}' infile

魔術..謝謝你們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM