Score:0

แยกคีย์จากไฟล์ yaml โดยใช้ awk

ธง ru

สมมติว่าฉันมีไฟล์ yaml แบบนี้:

ฟู:
  บาร์: 1

สภาพแวดล้อม:
  firstVar: จริง
  วินาทีVar: 20
  aa_thirdVar: 'สวัสดี'
  aa_fourthVar: เท็จ

และฉันต้องได้รับกุญแจภายใต้ สิ่งแวดล้อม คีย์ ยกเว้นคีย์ที่มี อ่า_ คำนำหน้าเป็นอาร์เรย์ทุบตีเพื่อใช้อาร์เรย์ในสคริปต์ทุบตี

Score:1
ธง cn

ใช้ ใช่ คำสั่งจาก https://kislyuk.github.io/yq/ เครื่องมือที่เหมาะสมในการแยกไฟล์รูปแบบ YAML คุณสามารถทำได้:

yq -r '.env|to_entries[]|
    ถ้า (.key|test("^[^a][^a][^_]*$")) แล้ว
        ( .key + "=" + (.value | @sh) )
    อื่น
        ว่างเปล่า
    จบ
'อินไฟล์

ซึ่งผลลัพธ์:

firstVar=จริง
วินาทีVar=20

ตอนนี้คุณจะต้อง ส่งออก ชุดของตัวแปรเหล่านี้

ส่งออก $(yq ... )

หรือสร้างอาร์เรย์:

IFS=$'\n' arr=( $(yq ... ) )

ใน ( .key + "=" + (.value | @sh) ) ส่วนหนึ่งจะเชื่อมต่อคู่ของคีย์-ค่าที่สร้างขึ้นโดยใช้ to_entries ฟังก์ชั่นและ @sh ไวยากรณ์ (ซึ่งเรียกว่า "รูปแบบสตริงและการหลบหนี") ใช้เพื่อจัดรูปแบบ Escape เชลล์ POSIX sh บน ค่า.

hr flag
อย่างน้อยใน jq-1.6 มีบูลีน `startswith()` คุณจึงทำบางอย่างเช่น `.env | ได้ to_entries[] | เลือก (.key | เริ่มต้นด้วย ("aa_") | ไม่) | ( .key + "=" + (.value | @sh) )`
αғsнιη avatar
cn flag
@steeldriver ฉันไม่คิดว่าพวกเขาจะมีหลายฟังก์ชั่นสำหรับการจับคู่นั้น (), จับภาพ () และทดสอบ (); น่าสนใจ! ขอบคุณมาก
hr flag
tbh ฉันเพิ่งคิดออกก่อนที่คุณจะโพสต์ - แต่ฉันไม่ได้คิดอะไรที่ดีเท่าของคุณ `( .key + "=" + (.value | @sh) )` สำหรับการจัดรูปแบบเอาต์พุต

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา