jq格式化對(duì)齊輸出

把輸出格式化曙寡,對(duì)齊讼溺。
例如令宿,假設(shè)有json數(shù)據(jù):

[
  {
    "id": 1,
    "name": "Joe",
    "email": "joe@domain.com"
  },
  {
    "id": 5,
    "name": "Jack",
    "email": "jack@domain.com"
  },
  {
    "id": 10,
    "name": "George",
    "email": "george@domain.com"
  }
]

希望按行輸出每一個(gè)數(shù)組內(nèi)容:

  1. 自然輸出

以四個(gè)空格作為分隔符輸出叼耙。

$ cat t.json | jq -r '.[] | (.id|tostring) + "    " + .name + "    " + .email'
1    Joe    joe@domain.com
5    Jack    jack@domain.com
10    George    george@domain.com

這樣明顯看到數(shù)據(jù)是沒法對(duì)齊的。

  1. 用tab鍵分割輸出
$ cat t.json | jq -r '.[] | (.id|tostring) + "\t" + .name + "\t" + .email'
1   Joe     joe@domain.com
5   Jack    jack@domain.com
10  George  george@domain.com

這樣就比較整齊了粒没;
但是如果其中一個(gè)字很長筛婉,例如名字很長: 100 Tom Hanks hanks.tom@domain.com
結(jié)果就是:

$ cat t.json | jq -r '.[] | (.id|tostring) + "\t" + .name + "\t" + .email'
1   Joe     joe@domain.com
5   Jack    jack@domain.com
10  George  george@domain.com
100 Tom Hanks   hanks.tom@domain.com

可以看到Tom Hanks的名字過長,占用了其他行屬于email的位置癞松。

另外爽撒,使用tab鍵分割還有另外一種寫法:

$ cat t.json | jq -r '.[] | "\(.id|tostring)\t\(.name)\t\(.email)"'
1   Joe     joe@domain.com
5   Jack    jack@domain.com
10  George  george@domain.com
100 Tom Hanks   hanks.tom@domain.com
  1. 指定列長度
$ cat t.json | jq -r '.[] | (.id | tostring | ("-" * (5 - length)) + .) + "  " + (.name | ("-" * (10 - length)) + .) + "  " + (.email | ("-" * (20 - length)) + .)'
----1  -------Joe  ------joe@domain.com
----5  ------Jack  -----jack@domain.com
---10  ----George  ---george@domain.com
--100  -Tom Hanks  hanks.tom@domain.com

這里為了說明方便,我使用了'-'作為占位符便于看清楚响蓉。這個(gè)語法我們定義:

  1. id字段占用5字符
  2. name字段占用10字符
  3. email字段占用20字符
  4. 各個(gè)字段之間用額外的兩個(gè)空格分開硕勿。

解釋一下語法(.name | ("-" * (10 - length)) + .)的含義:

  1. length值得是.name的值的長度
  2. ("-" * (10 - length))就是字符'-'重復(fù)(10-length)次
  3. 最后的.在這里就是.name字段的值。
    所以整個(gè).name占用10字符長度枫甲,前綴-占用10-length(.name)長度源武,余下的正好就是.name自己的長度扼褪。
  1. 使用@tsv
$ cat t.json | jq -r '.[] | [.id, .name, .email] | @tsv'
1   Joe joe@domain.com
5   Jack    jack@domain.com
10  George  george@domain.com
100 Tom Hanks   hanks.tom@domain.com

可以加表頭:

$ cat t.json | jq -r '["ID", "NAME", "EMAIL"], ["----", "------", "------"], (.[] | [.id, .name, .email]) | @tsv'
ID  NAME    EMAIL
----    ------  ------
1   Joe     joe@domain.com
5   Jack    jack@domain.com
10  George  george@domain.com
100 Tom Hanks   hanks.tom@domain.com

也可以加表尾:

$ cat t.json | jq -r '["ID", "NAME", "EMAIL"], ["----", "------", "------"], (.[] | [.id, .name, .email]), ["===", "=====", "======"] | @tsv'
ID  NAME    EMAIL
----    ------  ------
1   Joe     joe@domain.com
5   Jack    jack@domain.com
10  George  george@domain.com
100 Tom Hanks   hanks.tom@domain.com
=== =====   ======
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市粱栖,隨后出現(xiàn)的幾起案子话浇,更是在濱河造成了極大的恐慌,老刑警劉巖闹究,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幔崖,死亡現(xiàn)場離奇詭異,居然都是意外死亡渣淤,警方通過查閱死者的電腦和手機(jī)赏寇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來价认,“玉大人嗅定,你說我怎么就攤上這事】桃粒” “怎么了露戒?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捶箱。 經(jīng)常有香客問我智什,道長,這世上最難降的妖魔是什么丁屎? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任茴她,我火速辦了婚禮矩桂,結(jié)果婚禮上铐姚,老公的妹妹穿的比我還像新娘彭谁。我一直安慰自己,他們只是感情好共虑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布愧怜。 她就那樣靜靜地躺著,像睡著了一般妈拌。 火紅的嫁衣襯著肌膚如雪拥坛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天尘分,我揣著相機(jī)與錄音猜惋,去河邊找鬼。 笑死培愁,一個(gè)胖子當(dāng)著我的面吹牛著摔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播定续,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谍咆,長吁一口氣:“原來是場噩夢啊……” “哼禾锤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卧波,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤时肿,失蹤者是張志新(化名)和其女友劉穎庇茫,沒想到半個(gè)月后港粱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旦签,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年查坪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宁炫。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡偿曙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出羔巢,到底是詐尸還是另有隱情望忆,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布竿秆,位于F島的核電站启摄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏幽钢。R本人自食惡果不足惜歉备,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匪燕。 院中可真熱鬧蕾羊,春花似錦、人聲如沸帽驯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尼变。三九已至利凑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間享甸,已是汗流浹背截碴。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛉威,地道東北人日丹。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蚯嫌,于是被迫代替她去往敵國和親哲虾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丙躏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容